package com.service.iter;

import com.pojo.ConsumerProductRelationshipRel;
import com.pojo.Product;
import com.pojo.view.ShopCartView;
import com.util.Res;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * IProducts服务
 * 产品服务
 *
 * @author 蔡文欣
 * @date 2023/06/24 09:45:24
 */
public interface IProductsService {
    /**
     * 获取产品
     *
     * @param pageNo 页码
     * @return {@link List}<{@link Product}>
     */
    List<Product> getProducts(Integer pageNo, String query);

    /**
     * 获取产品价格
     *
     * @param id     ID
     * @param sizeId 尺寸id。
     * @return {@link Product}
     */
    Product getProductPrice(@Param("pageNo") Long id, @Param("sizeId") Integer sizeId);

    /**
     * 按ID获取产品
     *
     * @param id ID
     * @return {@link Product}
     */
    Product byIdGetProduct(Long id);


    /**
     * 通过消费者电话获取商品
     *
     * @return {@link List}<{@link ShopCartView}>
     */
    List<ShopCartView> byConsumerPhoneGetShops(String consumerPhone);

    /**
     * 添加购物车
     *
     * @param component 需要的信息
     * @return {@link Integer}
     */
    Res addShopCart(ConsumerProductRelationshipRel component);

    /**
     * 移除购物车
     *
     * @param id id
     * @return {@link Integer}
     */
    Res removeShopCart(@Param("id") Long id);

    /**
     * 清空购物车
     *
     * @param consumerPhone 消费者电话
     * @return {@link Integer}
     */
    Res emptyShopCart(@Param("consumerPhone") String consumerPhone);

    /**
     * 购物车内是否有重复的数据
     *
     * @param consumerPhone 消费者电话
     * @param productId     产品标识
     * @param sizeId        尺寸标识
     * @return {@link Integer}
     */
    Integer isDistinct(@Param("consumerPhone") String consumerPhone,
                       @Param("productId") Long productId,
                       @Param("sizeId") Long sizeId);

    /**
     * 更新购物车
     *
     * @param data 数据
     * @return {@link Integer}
     */
    Res updateShopCart(ConsumerProductRelationshipRel data);
    /**
     * 更新大小
     *
     * @param data 数据
     * @return {@link Res}
     */
    Res updateSize(ConsumerProductRelationshipRel data);
}
